using System;
using Ext;
using Ext.data;
using Ext.grid;
using Ext.util;
using ScriptFX;

namespace SampleScripts.grid {
    public delegate object ColumnRenderer(object val);
    public delegate string MoneyRenderer(string val);

    public class ArrayGridScript {
        public static void main(Dictionary args) {
            ExtClass.onReady(new AnonymousDelegate(delegate() { new ArrayGridScript().init(); }));
        }

        public void init() {
            object[] myData = GetMyData();

            Store ds = new Store(new StoreConfig()
                .reader(new ArrayReader(new Dictionary(), new Dictionary[] {
                    new Dictionary("name", "company"),
                    new Dictionary("name", "price", "type", "float"),
                    new Dictionary("name", "change", "type", "float"),
                    new Dictionary("name", "pctChange", "type", "float"),
                    new Dictionary("name", "lastChange", "type", "date", "dateFormat", "n/j h:ia")
                }))
                .ToDictionary()
            );
            ds.loadData(myData);


            // the DefaultColumnModel expects this blob to define columns. It can be extended to provide
            // custom or reusable ColumnModels
            ColumnModel colModel = new ColumnModel(new Dictionary[] {
                new Dictionary("id", "company", "header", "Company", "width", 160, "sortable", true, "locked", false, "dataIndex", "company"),
                new Dictionary("header", "Price", "width", 75, "sortable", true, "renderer", new MoneyRenderer(Format.usMoney), "dataIndex", "price"),
                new Dictionary("header", "Change", "width", 75, "sortable", true, "renderer", new ColumnRenderer(change), "dataIndex", "change"),
                new Dictionary("header", "% Change", "width", 75, "sortable", true, "renderer", new ColumnRenderer(pctChange), "dataIndex", "pctChange"),
                new Dictionary("header", "Last Updated", "width", 85, "sortable", true, "renderer", Format.dateRenderer("m/d/Y"), "dataIndex", "lastChange")
            });

            Ext.grid.GridPanel grid = new Ext.grid.GridPanel(new Ext.grid.GridPanelConfig()
                .el("grid-example")
                .ds(ds)
                .cm(colModel)
                .autoExpandColumn("company")
                .height(350)
                .width(600)
                .title("Array Grid")
                .ToDictionary()
            );

            grid.render();

            ((RowSelectionModel)grid.getSelectionModel()).selectFirstRow();
        }

        // example of custom renderer function
        private string italic(object val) {
            return "<i>" + val + "</i>";
        }

        // example of custom renderer function
        private string change(object val) {
            if ((int)val > 0) {
                return "<span style=\"color:green;\">" + val + "</span>";
            } else if ((int)val < 0) {
                return "<span style=\"color:red;\">" + val + "</span>";
            }
            return (string)val;
        }

        // example of custom renderer function
        private string pctChange(object val) {
            if ((int)val > 0) {
                return "<span style=\"color:green;\">" + val + "%</span>";
            } else if ((int)val < 0) {
                return "<span style=\"color:red;\">" + val + "%</span>";
            }
            return (string)val;
        }

        private object[] GetMyData() {
            return new object[] {
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"},
                                    new object[] {"Verizon Communications",35.57,0.39,1.11,"9/1 12:00am"},
                                    new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"9/1 12:00am"},
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"},
                                    new object[] {"Verizon Communications",35.57,0.39,1.11,"9/1 12:00am"},
                                    new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"9/1 12:00am"},
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"},
                                    new object[] {"Verizon Communications",35.57,0.39,1.11,"9/1 12:00am"},
                                    new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"9/1 12:00am"},
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"},
                                    new object[] {"Verizon Communications",35.57,0.39,1.11,"9/1 12:00am"},
                                    new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"9/1 12:00am"},
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"},
                                    new object[] {"Verizon Communications",35.57,0.39,1.11,"9/1 12:00am"},
                                    new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"9/1 12:00am"},
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"},
                                    new object[] {"Verizon Communications",35.57,0.39,1.11,"9/1 12:00am"},
                                    new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"9/1 12:00am"},
                                    new object[] {"3m Co",71.72,0.02,0.03,"9/1 12:00am"},
                                    new object[] {"Alcoa Inc",29.01,0.42,1.47,"9/1 12:00am"},
                                    new object[] {"Altria Group Inc",83.81,0.28,0.34,"9/1 12:00am"},
                                    new object[] {"American Express Company",52.55,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"American International Group, Inc.",64.13,0.31,0.49,"9/1 12:00am"},
                                    new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"9/1 12:00am"},
                                    new object[] {"Boeing Co.",75.43,0.53,0.71,"9/1 12:00am"},
                                    new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"9/1 12:00am"},
                                    new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"9/1 12:00am"},
                                    new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"9/1 12:00am"},
                                    new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"9/1 12:00am"},
                                    new object[] {"General Electric Company",34.14,-0.08,-0.23,"9/1 12:00am"},
                                    new object[] {"General Motors Corporation",30.27,1.09,3.74,"9/1 12:00am"},
                                    new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"9/1 12:00am"},
                                    new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"9/1 12:00am"},
                                    new object[] {"Intel Corporation",19.88,0.31,1.58,"9/1 12:00am"},
                                    new object[] {"International Business Machines",81.41,0.44,0.54,"9/1 12:00am"},
                                    new object[] {"Johnson & Johnson",64.72,0.06,0.09,"9/1 12:00am"},
                                    new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"9/1 12:00am"},
                                    new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"9/1 12:00am"},
                                    new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"9/1 12:00am"},
                                    new object[] {"Microsoft Corporation",25.84,0.14,0.54,"9/1 12:00am"},
                                    new object[] {"Pfizer Inc",27.96,0.4,1.45,"9/1 12:00am"},
                                    new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"9/1 12:00am"},
                                    new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"9/1 12:00am"},
                                    new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"9/1 12:00am"},
                                    new object[] {"United Technologies Corporation",63.26,0.55,0.88,"9/1 12:00am"}
                                };
        }
    }
}
